<!DOCTYPE html>
<!-- saved from url=(0047)http://t.zoukankan.com/leesymbol-p-4377509.html -->
<html lang="zh-CN"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <!-- Required meta tags -->
  <script src="./Unity中Awake与Start函数的调用情况总结(转) - 走看看_files/push.js.下载"></script><script src="./Unity中Awake与Start函数的调用情况总结(转) - 走看看_files/hm.js.下载"></script><script>
    var _hmt = _hmt || [];
    (function() {
      var hm = document.createElement("script");
      hm.src = "https://hm.baidu.com/hm.js?085ef535298f92786270c5cefcbf1c0b";
      var s = document.getElementsByTagName("script")[0]; 
      s.parentNode.insertBefore(hm, s);
    })();
  </script>
  <script charset="UTF-8" id="LA_COLLECT" src="./Unity中Awake与Start函数的调用情况总结(转) - 走看看_files/js-sdk-pro.min.js.下载"></script>
  <script>LA.init({id: "1y34NmvkVXzDqzJo",ck: "1y34NmvkVXzDqzJo"})</script>
  
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  <link rel="shortcut icon" href="https://common.cnblogs.com/favicon.svg" type="image/x-icon">
  <meta name="referrer" content="no-referrer">

  <!-- 引入博客园电脑端css -->
  <style></style><link rel="stylesheet" href="./Unity中Awake与Start函数的调用情况总结(转) - 走看看_files/blog-common.min.css">

  <!-- 响应式 meta标签 -->
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

  <title>Unity中Awake与Start函数的调用情况总结(转) - 走看看</title>
  <meta name="keywords" content="Unity中Awake与Start函数的调用情况总结(转)">
  <meta name="description" content="在Unity中编写脚本时，有一系列的可重写（override）函数供我们使用，其中的Awake与Start两个函数作为初始化与设置之用，几乎在每个脚本中都要用到。因此，正确的把握这两个函数的调用时机，">
  <style type="text/css">
    @media screen and (min-device-width: 961px){
      .kd{
        width: 1055px;
      }
      .left-kd{
        width: 730px;

      }
      .right-kd{
        width: 290px;
      }
      
    }

    @media screen and (min-device-width: 400px) and (max-device-width: 960px){

        .kd{
          width: 100%;
        }
        .left-kd{
          width: 100%;
        }
        .right-kd{
          width: 100%;
        }
    }

    ul li a{
      color:#337ab7;
      text-decoration:none;
    }
    h1{
      font-size:1.2rem;
      text-align:center;
      font-weight:bold;
    }
    .ul-li-title{
      padding: 10px;
      word-wrap:break-word;
    }
    .ul-li{
      padding: 10px;
      white-space:nowrap;
      overflow:hidden;
      text-overflow:ellipsis;
      font-size:0.95rem;
      line-height:1.5rem;
    }
    .ul-li-bg{
     background-color:rgb(245,245,245);
   }
   .from-a{
     word-wrap:break-word;
     font-size:0.95rem;
   }

    .li-rymodal{
      list-style: none;
      white-space: nowrap;
      width: 70px;
      display: inline-block;
    }
    .ul-rymodal{
      display: block;padding: 0;
      white-space: nowrap;
      overflow-x: scroll;
    }
    li{
      list-style-type:none;
    }
    /*包含以下五种的链接*/
    a {
        text-decoration: none;
        font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";
    }
/*    .code_img_closed,.cnblogs_code_collapse{
      display: none;
    }
    .cnblogs_code_hide{
      display: block;
    }*/
 </style>
<style>.medium-zoom-overlay {
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  opacity: 0;
  transition: opacity 300ms;
  will-change: opacity;
}

.medium-zoom--opened .medium-zoom-overlay {
  cursor: pointer;
  cursor: zoom-out;
  opacity: 1;
}

.medium-zoom-image {
  cursor: pointer;
  cursor: zoom-in;
  /*
    The `transition` is marked as "!important" for the animation to happen
    even though it's overriden by another inline `transition` style attribute.

    This is problematic with frameworks that generate inline styles on their
    images (e.g. Gatsby).

    See https://github.com/francoischalifour/medium-zoom/issues/110
   */
  transition: transform 300ms cubic-bezier(0.2, 0, 0.2, 1) !important;
}

.medium-zoom-image--hidden {
  visibility: hidden;
}

.medium-zoom-image--opened {
  position: relative;
  cursor: pointer;
  cursor: zoom-out;
  will-change: transform;
}
</style></head>
<body>

  <!-- 引入头部导航 -->
  
  <div style="width: 100%;margin: auto;">

      <div style="width:100%;height: 55px;background-color: #343434;">
          <div class="kd" style="margin: auto;">
            <div style="width: 40px;float: left;text-align: center;line-height: 55px;">
                <svg xmlns="http://www.w3.org/2000/svg" width="26" height="26" fill="currentColor" class="bi bi-exclude" viewBox="0 0 16 16" style="color: #fff;padding-right: 10px;padding-top: 14px;">
                  <path d="M0 2a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v2h2a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2v-2H2a2 2 0 0 1-2-2V2zm12 2H5a1 1 0 0 0-1 1v7h7a1 1 0 0 0 1-1V4z"></path>
            </svg>
            </div>
          </div>
            <div style="float: left;text-align: center;line-height: 55px;">
              <a href="http://t.zoukankan.com/" style="font-size:20px;color:#fff;"> zoukankan</a>
              <span style="color: #999;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;html&nbsp;&nbsp;css&nbsp;&nbsp;js&nbsp;&nbsp;c++&nbsp;&nbsp;java</span>
            </div> 
            <div style="clear: both;"></div>  
        </div>

      
      <div class="kd" style="margin: auto;margin-top: 10px;">
        <div class="kd" style="margin:auto;">

          <div class="left-kd" style="border: 1px solid #dfdfdf;border-radius: 3px 3px 3px 3px;margin: auto;float: left;margin-right: 30px;margin-bottom: 10px;">

            <ul style="padding-inline-start: 0px;">
              <li style="margin:15px;">
                <h1>Unity中Awake与Start函数的调用情况总结(转)</h1>
                <div style="border: 1px solid #dfdfdf;border-top:none;"></div>
                <span class="pre-scrollable"><div id="cnblogs_post_body" class="blogpost-body blogpost-body-html">
<p><span style="line-height: 1.5">在Unity中编写脚本时，有一系列的可重写（override）函数供我们使用，其中的Awake与Start两个函数作为初始化与设置之用，几乎在每个脚本中都要用到。因此，正确的把握这两个函数的调用时机，就能让我们在程序开发过程中避免一些错误，提高开发效率。比较懒，所以就没有上图，欢迎大家的批评指正: )</span></p>

<p>1、&nbsp; Awake函数</p>
<p align="left">&nbsp; &nbsp; &nbsp; &nbsp; 首先，我们来看unity的参考手册中对Awake函数的一些说明情况：</p>
<p align="left">&nbsp; &nbsp; &nbsp; &nbsp; 当脚本实例被加载时会调用Awake函数；Awake函数在所有的游戏对象被初始化完毕之后才会被调用；在脚本实例的整个生命周期中，Awake函数仅执行一次。那么，脚本实例何时被加载，脚本实例的整个生命周期又代表了什么，因为对这些概念存有疑惑，所以在此基础之上，自己又在引擎中进行了一些测试，通过打印输出的方式查看了一下Awake函数的执行情况，总结如下（没有特殊说明，均为在不切换场景的前提下）：</p>
<p align="left">&nbsp;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp;（1）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果游戏对象（即gameObject）的初始状态为关闭状态，那么运行程序，Awake函数不会执行；反之，如果游戏对象的初始状态为开启状态，那么Awake函数会执行。并且，值得注意的一点是，Awake函数的执行与否与脚本实例的状态（启用或禁用）并没有关系，而是与脚本实例所绑定的游戏对象的状态有关。</p>

<p>&nbsp; &nbsp; &nbsp; &nbsp;（2）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在不切换场景的前提下，原本处于关闭状态的游戏对象，当它被首次开启时，Awake函数会执行，并且是只在首次开启时才会执行；而已经开启（激活）的游戏对象（Awake函数已经执行过一次），将它关闭后再次开启，Awake函数不会再次执行。看来这是对应了手册中说明的在脚本实例的整个生命周期中仅执行一次的情况。</p>

<p>&nbsp; &nbsp; &nbsp; &nbsp;（3）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果重新加载场景，那么场景内Awake函数的执行情况重新遵循上述两点。</p>

<p>2、&nbsp; Start函数</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; 还是先看参考手册中对Start函数的一些说明情况：</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; 当Update函数第一次被调用前会调用Start函数；Start函数只在脚本实例被启用时才会执行；Start函数总是在Awake函数之后执行。在此基础之上，自己的测试总结如下 （没有特殊说明，均为在不切换场景的前提下）：</p>

<p>&nbsp; &nbsp; &nbsp; &nbsp;（1）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果游戏对象被关闭，那么Start函数不会执行。想一想这是理所当然的，游戏对象关闭了，脚本实例不会被加载，Awake函数不会执行，Start函数不会执行，Update函数等也不会执行。</p>

<p>&nbsp; &nbsp; &nbsp; &nbsp;（2）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果游戏对象开启了，对象上绑定的脚本实例被禁用了，那么Start函数不会执行。这是Start函数的特点，只有在脚本实例被启用时它才会执行，这个说明中有提到。注意，这与Awake函数是有区别的。</p>

<p>&nbsp; &nbsp; &nbsp; &nbsp;（3）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果游戏对象开启了，对象上绑定的脚本实例也开启了，那么Start函数会执行。并且Start函数只会在脚本实例首次被开启时才会执行。如果是已经开启过的脚本实例被关闭后再次开启，那么Start函数不会再次执行。</p>

<p>&nbsp; &nbsp; &nbsp; &nbsp;（4）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果重新加载场景，那么场景内Start函数的执行情况重新遵循上述三点。</p>

<p>&nbsp; &nbsp; &nbsp; &nbsp; 除此之外，还有对Awake函数和Start函数都比较重要的一点，那就是当游戏对象之间存在父子关系时（不论层级的多少）。这时，父游戏对象的状态（开启或关闭）完全决定了子游戏对象上的脚本函数的执行情况。总的来说就是，只有在父游戏对象被开启的状态下，程序才会考虑是否调用子游戏对象上的脚本函数（Awake与Start等）。自上而下，以此类推。</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; 最后，自己对于Awake与Start函数的使用，一般都是在Awake函数中获取游戏对象或者脚本实例的信息，然后在Start函数中进行一些获取之后的初始化设置。具体情况，还要根据需求灵活变化。总结就到这里了，谢谢大家的阅读，欢迎批评指正。</p>





<p><strong>http://blog.csdn.net/haohan_meng</strong></p>
</div>
<div class="clear"></div>
</span>
              </li>
              <div style="border: 1px solid #dfdfdf;border-top:none;"></div>
              <li class="ul-li" style="padding-left:15px;padding-right: 15px;">

                <b>相关阅读:</b><br>
                <nobr>
                  <a href="http://t.zoukankan.com/caicaihong-p-5548854.html" target="_blank">第二个冲刺</a>
                    <br><a href="http://t.zoukankan.com/caicaihong-p-5535163.html" target="_blank">实验四主存空间的分配和回收</a>
                    <br><a href="http://t.zoukankan.com/caicaihong-p-5533552.html" target="_blank">Sprint总结</a>
                    <br><a href="http://t.zoukankan.com/caicaihong-p-5526384.html" target="_blank">Sprint回顾</a>
                    <br><a href="http://t.zoukankan.com/caicaihong-p-5504747.html" target="_blank">Scrum项目5.0</a>
                    <br><a href="http://t.zoukankan.com/chengJAVA-p-3574353.html" target="_blank">hibernate jpa 注解 @Temporal(TemporalType.DATE) 格式化时间日期，页面直接得到格式化类型的值</a>
                    <br><a href="http://t.zoukankan.com/chengJAVA-p-3561011.html" target="_blank">获得HttpServletResponse及其他对象</a>
                    <br><a href="http://t.zoukankan.com/chengJAVA-p-3559856.html" target="_blank">UUID.randomUUID()方法介绍</a>
                    <br><a href="http://t.zoukankan.com/chengJAVA-p-3428939.html" target="_blank">psp个人软件过程需求文档</a>
                    <br><a href="http://t.zoukankan.com/chengJAVA-p-3405452.html" target="_blank">电子产品自动搜索比价系统设计与实现 项目愿景与范围</a>
                    <br>                </nobr>
              </li>
              <div style="border: 1px solid #dfdfdf;border-top:none;"></div>
              <li class="list-group-item from-a mb-2" style="margin:15px;">
                原文地址：https://www.cnblogs.com/leesymbol/p/4377509.html
              </li>

            </ul>
          </div>


          <!-- 右侧开始 -->
          <div class="right-kd" style="margin: auto;margin: 0px;float: left;">
            <ul class="right-kd" style="word-break:break-all;border: 1px solid #dfdfdf;border-radius: 3px 3px 3px 3px;padding: 0px;margin: 0px;">
              <li class="ul-li-bg ul-li-title" aria-current="true" style="padding-left:15px;padding-right: 15px;">
                最新文章
              </li>
              <li class="ul-li" style="padding-left:15px;padding-right:15px;">
                <nobr>
                  <a href="http://t.zoukankan.com/Gbeniot-p-4146864.html" target="_blank">HTML5 的新的表单属性</a>
                    <br><a href="http://t.zoukankan.com/Gbeniot-p-4146726.html" target="_blank">HTML5 学习笔记 1</a>
                    <br><a href="http://t.zoukankan.com/Gbeniot-p-4142836.html" target="_blank">htaccess rewrites重写规则实例</a>
                    <br><a href="http://t.zoukankan.com/Gbeniot-p-4134243.html" target="_blank">禁止 PC端打开网页 进行跳转</a>
                    <br><a href="http://t.zoukankan.com/Gbeniot-p-4110463.html" target="_blank">web app 开发</a>
                    <br><a href="http://t.zoukankan.com/xiangtingshen-p-10962057.html" target="_blank">串口</a>
                    <br><a href="http://t.zoukankan.com/xiangtingshen-p-10961869.html" target="_blank">PWM</a>
                    <br><a href="http://t.zoukankan.com/xiangtingshen-p-10961427.html" target="_blank">定时器TIM，pwm</a>
                    <br><a href="http://t.zoukankan.com/xiangtingshen-p-10961014.html" target="_blank">系统时钟</a>
                    <br><a href="http://t.zoukankan.com/xiangtingshen-p-10960632.html" target="_blank">启动文件startup_stm32f40_41xxx.s</a>
                    <br>                </nobr>
              </li>
            </ul>

            <ul class="right-kd" style="word-break:break-all;border: 1px solid #dfdfdf;border-radius: 3px 3px 3px 3px;padding: 0px;margin-top: 10px;">
              <li class="list-group-item ul-li-bg ul-li-title" aria-current="true" style="padding-left:15px;padding-right: 15px;">
                热门文章
              </li>
              <li class="ul-li" style="padding-left:15px;padding-right: 15px;">
                <nobr>
                  <a href="http://t.zoukankan.com/xiangtingshen-p-10960352.html" target="_blank">外部中断</a>
                    <br><a href="http://t.zoukankan.com/xiangtingshen-p-10960181.html" target="_blank">位带操作</a>
                    <br><a href="http://t.zoukankan.com/xiangtingshen-p-10959754.html" target="_blank">时钟体系</a>
                    <br><a href="http://t.zoukankan.com/xiangtingshen-p-10958821.html" target="_blank">GPIO</a>
                    <br><a href="http://t.zoukankan.com/xiangtingshen-p-10958569.html" target="_blank">红外</a>
                    <br><a href="http://t.zoukankan.com/caicaihong-p-5568364.html" target="_blank">6.7</a>
                    <br><a href="http://t.zoukankan.com/caicaihong-p-5559471.html" target="_blank">6.4</a>
                    <br><a href="http://t.zoukankan.com/caicaihong-p-5555182.html" target="_blank">3.团队变化</a>
                    <br><a href="http://t.zoukankan.com/caicaihong-p-5555155.html" target="_blank">学术诚信与职业道德</a>
                    <br><a href="http://t.zoukankan.com/caicaihong-p-5554384.html" target="_blank">6.2冲刺</a>
                    <br>                </nobr>
              </li>
            </ul>

          </div>
        </div>
      </div>
      <div style="clear: both;"></div>


      <!-- 栅栏结束 -->

      <div class="kd" style="margin: auto;">
        <div style="font-size:0.8rem;margin: auto;text-align: center;padding: 10px;">
          Copyright © 2011-2022&nbsp;走看看
        </div>
        <!-- 引入底部 -->
        <!-- 百度自动推送js -->
<script>
  (function(){
    var bp = document.createElement('script');
    var curProtocol = window.location.protocol.split(':')[0];
    if (curProtocol === 'https'){
     bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
   }
   else{
    bp.src = 'http://push.zhanzhang.baidu.com/push.js';
  }
  var s = document.getElementsByTagName("script")[0];
  s.parentNode.insertBefore(bp, s);
})();
</script>
<!-- 百度自动推送js -->
      </div>

  </div>

  <script src="./Unity中Awake与Start函数的调用情况总结(转) - 走看看_files/jquery-2.2.0.min.js.下载"></script>
  <script src="./Unity中Awake与Start函数的调用情况总结(转) - 走看看_files/blog-common.min.js.下载"></script>
  <script src="./Unity中Awake与Start函数的调用情况总结(转) - 走看看_files/encoder.js.下载"></script>

  <script type="text/javascript">isPoped = false;</script>
  <a href="https://cloud.tencent.com/act/cps/redirect?redirect=1577&amp;cps_key=5d24866b838151ffd357eb6fde659035&amp;from=console" id="redirect_url"></a>
  <a href="http://t.zoukankan.com/leesymbol-p-4377509.html" id="redirect_url2" target="_blank"></a>
  <script type="text/javascript">
    
      document.onclick = function()
      {
        if (!isPoped)
        {       
          document.getElementById("redirect_url").click();
          document.getElementById("redirect_url2").click();
                    isPoped = true;
                  }
      }
    </script>


</body></html>